from rest_framework import serializers
from django_redis import get_redis_connection


class RegisterSmscodeSerializer(serializers.Serializer):

    """
    验证:
    1.字段类型的验证
    2.字段选项的验证
    3.单个字段验证
    4.多个字段验证
    """

    text = serializers.CharField(max_length=4,min_length=4,required=True,label="图片验证码")
    image_code_id = serializers.UUIDField(label="uuid")

    # 用户的图片验证码　获取redis的图片验证码
    def validate(self, attrs):
        # 1.用户的图片验证码
        text = attrs.get("text")
        image_code_id = attrs.get("image_code_id")
        print(text)

        # 2.获取redis的图片验证码
        redis_conn = get_redis_connection("code")
        # 获取redis的数据
        redis_text = redis_conn.get('img_%s'%image_code_id)
        # 时效
        if redis_text is None:
            raise serializers.ValidationError("图片验证码以过期")
        # 比较
        # redis的数据是bytes类型  二进制类型！　redis取出来的值　都是二进制的类型
        # 统一大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError("输入的验证码不一致")

        return attrs
